//
//  main.m
//  正则表达式
//
//  Created by J on 15/12/23.
//  Copyright © 2015年 J. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NSString+Extension.h"
#import "RegexKitLite.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
      
        NSString* str = @"http://t.cn/R4qaC1f #晚安读物#  #晚安读物# 有男票的抱男票，@9没男票的抱紧手机，请收下[阴险][阴险]";
        
        NSString* emotionPattern = @"\\[[\\u4e00-\\u9fa5]+\\]";//只要是中文就找出来

        //#话题#规则
        NSString* atPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";//头尾#中间数字 字母汉字都行
        
        
        //        |匹配多个条件 相当于or \或
        NSString* topicPattern = @"\\[[\\u4e00-\\u9fa5]+\\]|@[0-9a-zA-Z\\u4e00-\\u9fa5]+|#[0-9a-zA-Z\\u4e00-\\u9fa5]+";//头尾#中间数字 字母汉字都行
        
        
        

        NSString* urlPattern = @"((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?";//头尾#中间数字 字母汉字都行 0个或者一个s

        
        NSString* pattern = [NSString stringWithFormat:@"%@|%@|%@|%@",emotionPattern,atPattern,topicPattern,urlPattern];

        
        //以正则表达式 遍历
        [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//            int a = 10;
//            int * p = &a;
//            int **q = &p;
//            NSLog(@"%d",**q);
//            NSLog(@"%d",*p);
            
//            NSRange rage = * capturedRanges;
            NSLog(@"enumerate---- %@ %@",*capturedStrings,NSStringFromRange(*capturedRanges));
//            *stop = YES;
        }];
        
        
        //以正则表达式为条件切割  就是排除不需要的部分
        [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
            
            NSLog(@" sSeparatedByRegex:::%@ %@",*capturedStrings,NSStringFromRange(*capturedRanges));
        }];
        
    }
    
    return 0;
}
    

    void test2(){
    
    
    //5-11
    //        NSString* qq =@"18911011194";
    //
    //        NSLog(@"%zd",[qq isQQ]);
    //
    //        NSLog(@"%zd",[qq isPhoneNumber]);
    
    //        NSString* ip = @"192.168.99.101";
    //
    //        NSLog(@"%zd",[ip isIPAddress]);
    
    
    //1.判断字符串是否符合某个特定规则
    //        *判断某个字符是否为QQ号码\电话号码\邮箱
    //2.截取字符串中符合某个特定规则的内容
    //        ＊截取指定内容
    
    
    
    NSString* str = @"http://t.cn/R4qaC1f #晚安读物#  #晚安读物# 有男票的抱男票，@9没男票的抱紧手机，请收下[阴险][阴险]";
    
    NSString* emotionPattern = @"\\[[\\u4e00-\\u9fa5]+\\]";//只要是中文就找出来
    //@规则
    
    //        NSString* pattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+";
    
    
    //#话题#规则
    NSString* atPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";//头尾#中间数字 字母汉字都行
    
    
    //        |匹配多个条件 相当于or \或
    NSString* topicPattern = @"\\[[\\u4e00-\\u9fa5]+\\]|@[0-9a-zA-Z\\u4e00-\\u9fa5]+|#[0-9a-zA-Z\\u4e00-\\u9fa5]+";//头尾#中间数字 字母汉字都行
    
    
    //url链接的规则  http://t.cn/R4qaC1f
    NSString* urlPattern = @"((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?";//头尾#中间数字 字母汉字都行 0个或者一个s
    
    
    NSString* pattern = [NSString stringWithFormat:@"%@|%@|%@|%@",emotionPattern,atPattern,topicPattern,urlPattern];
    
    
    NSRegularExpression  *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];
    //2. 测试字符串
    NSArray* result = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
    //    NSLog(@"文字长度: %zd 匹配结
    
    //3.遍历结果
    
    for (NSTextCheckingResult * Result in result) {
        
        NSLog(@"%@ %@",NSStringFromRange(Result.range),[str substringWithRange:Result.range]);
        
    }
    
    
    NSLog(@"%@",result);

    
}

void str1(){
    
    NSString* userName = @"1aia1";
    /**
     使用正则表达式步骤
     1.创建一个正则表达式对象 : 定义规则
     2.利用正则表达式对象来测试相应的字符串
     */
    
    //1.创建正则表达式  Pattern:规则 样式
    //        NSString* pattern = @"[0-9]";
    //        NSString* pattern = @"ab7";
    //        []代表只会查找内部的某一个字符而已
    //        NSString* pattern = @"[007]";
    //            NSString* pattern = @"[a-zA-Z0-9]";//a - z的所有小些字母 A-Z的所有大些字母 0-9的所有数字
    //        NSString* pattern = @"[[0-9][0-9]]";//找两个连在一起的数字
    //        NSString* pattern = @"\\d\\d\\d";//找三个连在一起的数字有几个结果
    //         NSString* pattern = @"\\d{3}a{2}";//找三个连在一起的数字 2个a有几个结果 如果有3个a连在一起也算 因为3个包含2个已经满足结果
    //        NSString* pattern = @"\\d{2,4}";//2或者4个数字
    //        ?: 0 个或者1个
    //        +: 至少一个
    //        *: 0个或者多个
    //        NSString* pattern = @"\\d+";//2或者4个数字
    
    //        NSString* pattern = @"^\\d{3}";// 只要是数字就算一个 ^匹配字符串的开始
    //        NSString* pattern = @"\\d{3}$";// 以 3个数字结尾 $匹配字符串的结束
    
    //        NSString* pattern = @"^\\d[0-9a-zA-Z]*\\d$";// 数字开头 数字结尾 中间 随意个 0 - 9 a - z A - Z
    NSString* pattern = @"^\\d.{3}\\d$";// 数字开头 数字结尾 中间 随意个 0 - 9 a - z A - Z .代表任意
    
    
    
    NSRegularExpression  *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];
    
    NSArray* result = [regex matchesInString:userName options:0 range:NSMakeRange(0, userName.length)];
    NSLog(@"%zd",result.count);
    

}

/**
 *  普通做法:检测全数字
 */
void test(){
    
    
    
    
    NSString* userName = @"aaa111";
    BOOL flag = YES;
    for (int i = 0; i<userName.length; i++ ) {
        unichar c = [userName characterAtIndex:i];
        if (!(c >='0'&&c<='9')){
            flag = NO;
            break;
            
        }
        
    }
    
    if (flag) {
        NSLog(@"用户名正确");
        
    }else{
        
        NSLog(@"里面包含了非数字");
        
    }
    

}